package com.saodisheng.service;

import com.jfinal.plugin.activerecord.Model;
import com.saodisheng.model.User;

import java.util.List;

/**
 * description: 账户业务
 *
 * @author 扫地生_saodisheng
 * @date 2022/1/29
 */
@SuppressWarnings("rawtypes")
public interface AccountService {

	/**
	 * 更新用户头像
	 * @param UserId
	 * @param relativePathFileName 头像关联地址
	 */
	void updateUserAvatar(int UserId, String relativePathFileName);

	/**
	 * 通过nickName获取User对象，仅返回指定的字段，多字段用逗号分隔
	 */
	User getByNickName(String nickName, String columns);

	/**
	 * 通过 id 获取User对象，只能获取到未被 block 的 User
	 */
	User getUsefulById(int UserId);

    /**
     * 优先从缓存中获取 User 对象，可获取到被 block 的 User
     */
    User getById(int UserId);

	void joinNickNameAndAvatar(List<? extends Model> modelList);

	void joinNickNameAndAvatar(Model model);

	void join(String joinOnField, List<? extends Model> modelList, String... joinAttrs);

	/**
	 * 在Posts 模块，需要关联查询获取 User 对象的 nickName、avatar 时使用此方法
	 * 避免使用关联查询，优化性能，在使用中更关键的地方在于缓存的清除
	 *
	 * @param joinOnField join 使用的字段名，User 这端使用 id
	 * @param model 需要 join 的 model
	 * @param joinAttrs 需要 join 到 model 中的的属性名称
	 */
	void join(String joinOnField, Model model, String... joinAttrs);


    /**
     * likeCount 增加 1
     */
    void addLikeCount(int UserId);

    /**
     * likeCount 减去 1
     */
    void minusLikeCount(int UserId);

    /**
	 * 根据 UserId 值移除缓存
	 */
	void clearCache(int UserId);
	
	/**
	 * 获取热门用户,暂时获取15个
	 */
	List<User> getHotUsers();
}



